javascript oop、instanceof 和基类
全部标签 #includeusingnamespacestd;classbase1{};classbase2{virtualvoidshow(){}};classtest1{};classtest2{virtualvoidshow(){}};classderv1:publicvirtualbase1{};classderv12:publicvirtualbase2{};classderv2:publicvirtualbase2,publictest1{};classderv22:publicvirtualbase2,publicvirtualtest1{};classderv222:public
有没有办法强制派生类使用抽象基类的构造函数?它一定不是真正的构造函数,我对创造性解决方案持开放态度。classAbstract{private:intMember;stringText;public:Abstract(intMember,stringText){this->Member=Member;this->Text=Text;}//e.g.definingvirtualfunctions}例如我的抽象类有一些私有(private)成员,每个派生类也应该有。而且它们应该在构造函数中定义,即使违背派生类的意愿也是如此。我知道构造函数不是继承的。但是是否有产生类似行为的解决方法?
在访问using从具有模板化基类的基类开始,如果没有别的,我遇到了冗长的问题。在下面的代码中,派生类尝试使用my_type来自其基类。templateclassBase{public:usingmytype=T;};templateclassDerived:publicBase{public://usingthebase'smytypeherestatictypenameBase::mytypefunc(){return0;}};然而,在实践中,我发现这是一个非常多的字符,因为它看起来应该更简单。如果Base类没有被模板化,那么它就不需要或类型名称(显然)。在我的实际问题中,我有大量从
是否可以从程序中其他一些位置的派生类实例访问基类公共(public)成员。classbase{public:intx;base(intxx){x=xx;}};classderived:base{public:derived(intxx):base(xx){}};classmain{public:derived*myDerived;voidm1(){myDerived=newderived(5);m2(myDerived);}voidm2(derived*myDerived){printf("%i",myDerived->x);}};在上面的代码之后,我得到了以下错误。`error:'i
我想使用基类指针调用未在基类中定义的派生类函数。但这总是会引发错误:errorC2039:‘derivedFunctionName’:isnotamemberof‘BaseClass’你知道我该如何解决这个问题吗?谢谢, 最佳答案 您不能通过指向基类的指针调用只出现在派生类中的成员;您必须首先将它(可能使用dynamic_cast)转换为指向派生类型的指针——否则编译器根本不知道该方法是否存在。它可能看起来像这样:voidsomeMethod(Base*bp){Derived*dp=dynamic_cast(bp);if(dp!=n
new返回的派生类指针可以类型转换为其基类指针。这是真的还是假的?我知道dynamic_cast可以用来施放缺点。一般如何将派生类的指针强制转换为基类的指针? 最佳答案 是的。从指向派生类的指针到指向基类的指针的转换是隐式的。因此,以下内容完全没问题:structB{};structD:B{};D*my_d_ptr=newD;B*my_d_ptr_as_a_b_ptr=my_d_ptr; 关于c++-派生类的指针可以类型转换为其基类的指针吗?,我们在StackOverflow上找到一个类
我有一组自定义类Student对象。CourseStudent和ResearchStudent都继承自Student,Student的所有实例都是其中之一。我有一个函数可以遍历数组,确定每个学生的子类型,然后对它们调用特定于子类型的成员函数。问题是,因为这些函数没有被重载,所以在Student中找不到,所以编译器大惊小怪。如果我有一个指向Student的指针,是否有办法获得指向该Student子类型的指针?我是否需要在此处进行某种伪造的转换以绕过编译时错误? 最佳答案 最好的办法是使用虚函数:classStudent{//...vi
如何从基类调用派生函数?我的意思是,能够将一个函数从基类替换为派生类。例如classa{public:voidf1();voidf2();};voida::f1(){this->f2();}/*heregoesthea::f2()definition,etc*/classb:publica{public:voidf2();};/*heregoestheb::f2()definition,etc*/voidlala(ints){a*o;//Iwantthistobeclass'a'inthisspecificexampleswitch(s){case0://typebo=newb();b
我想这样做:classDerived;classBase{virtualDerivedf()=0;};classDerived:publicBase{};当然这是行不通的,因为我不能返回不完整的类型。但是我也不能在base之前定义Derived,因为我也不能从不完整的类型继承。我想我可以使用模板作为解决方法(使用Derived作为Base的模板参数),但这似乎是一种非常丑陋的做事方式。是否还有其他方法?详细说明:我正在编写一个光线追踪器,每个Shape类都有一个返回其边界框的函数。但是,我已将BBox设为Shape的子类,因此我可以将其可视化。这是糟糕的设计吗?
我正在为游戏实现一个事件系统。它使用事件队列和数据结构来保存给定事件类型的所有已注册事件处理程序。到目前为止注册处理程序工作正常,但是当涉及到注销它们时(例如,当游戏对象被销毁时会发生的事情)我在模板和转换方面遇到了一些麻烦。我将EventHandler定义为某种仿函数,部分基于SzymonGatner关于http://www.gamedev.net/reference/programming/features/effeventcpp/的文章.准确地说,我采用了HandlerFunctionBase和MemberFunctionHandler类定义并提出:classBaseEventH